<!DOCTYPE html>
<html lang="en-us">
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
<meta charset="UTF-8">
<title>Dynamic field mapping | Elasticsearch Guide [7.7] | Elastic</title>
<link rel="home" href="index.html" title="Elasticsearch Guide [7.7]">
<link rel="up" href="dynamic-mapping.html" title="Dynamic Mapping">
<link rel="prev" href="dynamic-mapping.html" title="Dynamic Mapping">
<link rel="next" href="dynamic-templates.html" title="Dynamic templates">
<meta name="DC.type" content="Learn/Docs/Elasticsearch/Reference/7.7">
<meta name="DC.subject" content="Elasticsearch">
<meta name="DC.identifier" content="7.7">
<meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.optimizely.com/js/18132920325.js"></script>
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
    <link rel="manifest" href="/manifest.json">
    <meta name="apple-mobile-web-app-title" content="Elastic">
    <meta name="application-name" content="Elastic">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
    <meta name="theme-color" content="#ffffff">
    <meta name="naver-site-verification" content="936882c1853b701b3cef3721758d80535413dbfd">
    <meta name="yandex-verification" content="d8a47e95d0972434">
    <meta name="localized" content="true">
    <meta name="st:robots" content="follow,index">
    <meta property="og:image" content="https://www.elastic.co/static/images/elastic-logo-200.png">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    <link rel="apple-touch-icon-precomposed" sizes="64x64" href="/favicon_64x64_16bit.png">
    <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/favicon_32x32.png">
    <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/favicon_16x16.png">
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="/guide/static/styles.css">
  </head>

  <!--© 2015-2021 Elasticsearch B.V. Copying, publishing and/or distributing without written permission is strictly prohibited.-->

  <body>
    <!-- Google Tag Manager -->
    <script>dataLayer = [];</script><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-58RLH5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-58RLH5');</script>
    <!-- End Google Tag Manager -->

    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-12395217-16"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'UA-12395217-16');
    </script>

    <!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
    <script type="text/javascript">
      (function(){var g=function(e,h,f,g){
      this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
      this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
      this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
      this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
      this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
      try{(new g(100,"r","QSI_S_ZN_emkP0oSe9Qrn7kF","https://znemkp0ose9qrn7kf-elastic.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_emkP0oSe9Qrn7kF")).start()}catch(i){}})();
    </script><div id="ZN_emkP0oSe9Qrn7kF"><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
    <!--END WEBSITE FEEDBACK SNIPPET-->

    <div id="elastic-nav" style="display:none;"></div>
    <script src="https://www.elastic.co/elastic-nav.js"></script>

    <!-- Subnav -->
    <div>
      <div>
        <div class="tertiary-nav d-none d-md-block">
          <div class="container">
            <div class="p-t-b-15 d-flex justify-content-between nav-container">
              <div class="breadcrum-wrapper"><span><a href="/guide/" style="font-size: 14px; font-weight: 600; color: #000;">Docs</a></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="main-container">
      <section id="content">
        <div class="content-wrapper">

          <section id="guide" lang="en">
            <div class="container">
              <div class="row">
                <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                  <!-- start body -->
                  <div class="page_header">
<strong>IMPORTANT</strong>: No additional bug fixes or documentation updates
will be released for this version. For the latest information, see the
<a href="../current/index.html">current release documentation</a>.
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch Guide [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="mapping.html">Mapping</a></span>
»
<span class="breadcrumb-link"><a href="dynamic-mapping.html">Dynamic Mapping</a></span>
»
<span class="breadcrumb-node">Dynamic field mapping</span>
</div>
<div class="navheader">
<span class="prev">
<a href="dynamic-mapping.html">« Dynamic Mapping</a>
</span>
<span class="next">
<a href="dynamic-templates.html">Dynamic templates »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="dynamic-field-mapping"></a>Dynamic field mapping<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/dynamic/field-mapping.asciidoc">edit</a>
</h2>
</div></div></div>
<p>By default, when a previously unseen field is found in a document,
Elasticsearch will add the new field to the type mapping.   This behaviour can
be disabled, both at the document and at the <a class="xref" href="object.html" title="Object datatype"><code class="literal">object</code></a>  level, by
setting the <a class="xref" href="dynamic.html" title="dynamic"><code class="literal">dynamic</code></a> parameter to <code class="literal">false</code> (to ignore new fields) or to <code class="literal">strict</code> (to throw
an exception if an unknown field is encountered).</p>
<p>Assuming <code class="literal">dynamic</code> field mapping is enabled, some simple rules are used to
determine which datatype the field should have:</p>
<div class="informaltable">
<table border="0" cellpadding="4px">
<colgroup>
<col>
<col>
</colgroup>
<tbody valign="top">
<tr>
<td valign="top">
<p>
<span class="strong strong"><strong>JSON datatype</strong></span>
</p>
</td>
<td valign="top">
<p>
<span class="strong strong"><strong>Elasticsearch datatype</strong></span>
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">null</code>
</p>
</td>
<td valign="top">
<p>
No field is added.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
<code class="literal">true</code> or <code class="literal">false</code>
</p>
</td>
<td valign="top">
<p>
<a class="xref" href="boolean.html" title="Boolean datatype"><code class="literal">boolean</code></a> field
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
floating point number
</p>
</td>
<td valign="top">
<p>
<a class="xref" href="number.html" title="Numeric datatypes"><code class="literal">float</code></a> field
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
integer
</p>
</td>
<td valign="top">
<p>
<a class="xref" href="number.html" title="Numeric datatypes"><code class="literal">long</code></a> field
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
object
</p>
</td>
<td valign="top">
<p>
<a class="xref" href="object.html" title="Object datatype"><code class="literal">object</code></a> field
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
array
</p>
</td>
<td valign="top">
<p>
Depends on the first non-<code class="literal">null</code> value in the array.
</p>
</td>
</tr>
<tr>
<td valign="top">
<p>
string
</p>
</td>
<td valign="top">
<p>
Either a <a class="xref" href="date.html" title="Date datatype"><code class="literal">date</code></a> field
    (if the value passes <a class="xref" href="dynamic-field-mapping.html#date-detection" title="Date detection">date detection</a>),
a <a class="xref" href="number.html" title="Numeric datatypes"><code class="literal">double</code></a> or <a class="xref" href="number.html" title="Numeric datatypes"><code class="literal">long</code></a> field
    (if the value passes <a class="xref" href="dynamic-field-mapping.html#numeric-detection" title="Numeric detection">numeric detection</a>)
or a <a class="xref" href="text.html" title="Text datatype"><code class="literal">text</code></a> field, with a <a class="xref" href="keyword.html" title="Keyword datatype"><code class="literal">keyword</code></a> sub-field.
</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>These are the only <a class="xref" href="mapping-types.html" title="Field datatypes">field datatypes</a> that are dynamically
detected.  All other datatypes must be mapped explicitly.</p>
<p>Besides the options listed below, dynamic field mapping rules can be further
customised with <a class="xref" href="dynamic-templates.html" title="Dynamic templates"><code class="literal">dynamic_templates</code></a>.</p>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="date-detection"></a>Date detection<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/dynamic/field-mapping.asciidoc">edit</a>
</h3>
</div></div></div>
<p>If <code class="literal">date_detection</code> is enabled (default), then new string fields are checked
to see whether their contents match any of the date patterns specified in
<code class="literal">dynamic_date_formats</code>.  If a match is found, a new <a class="xref" href="date.html" title="Date datatype"><code class="literal">date</code></a> field is
added with the corresponding format.</p>
<p>The default value for <code class="literal">dynamic_date_formats</code> is:</p>
<p>[ <a class="xref" href="mapping-date-format.html#strict-date-time"><code class="literal">"strict_date_optional_time"</code></a>,<code class="literal">"yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"</code>]</p>
<p>For example:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT my_index/_doc/1
{
  "create_date": "2015/09/02"
}

GET my_index/_mapping <a id="CO361-1"></a><i class="conum" data-value="1"></i></pre>
</div>
<div class="console_widget" data-snippet="snippets/783.console"></div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO361-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>The <code class="literal">create_date</code> field has been added as a <a class="xref" href="date.html" title="Date datatype"><code class="literal">date</code></a>
field with the <a class="xref" href="mapping-date-format.html" title="format"><code class="literal">format</code></a>:<br>
<code class="literal">"yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"</code>.</p>
</td>
</tr>
</table>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="_disabling_date_detection"></a>Disabling date detection<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/dynamic/field-mapping.asciidoc">edit</a>
</h4>
</div></div></div>
<p>Dynamic date detection can be disabled by setting <code class="literal">date_detection</code> to <code class="literal">false</code>:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT my_index
{
  "mappings": {
    "date_detection": false
  }
}

PUT my_index/_doc/1 <a id="CO362-1"></a><i class="conum" data-value="1"></i>
{
  "create": "2015/09/02"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/784.console"></div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO362-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>The <code class="literal">create_date</code> field has been added as a <a class="xref" href="text.html" title="Text datatype"><code class="literal">text</code></a> field.</p>
</td>
</tr>
</table>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="_customising_detected_date_formats"></a>Customising detected date formats<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/dynamic/field-mapping.asciidoc">edit</a>
</h4>
</div></div></div>
<p>Alternatively, the <code class="literal">dynamic_date_formats</code> can be customised to support your
own <a class="xref" href="mapping-date-format.html" title="format">date formats</a>:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT my_index
{
  "mappings": {
    "dynamic_date_formats": ["MM/dd/yyyy"]
  }
}

PUT my_index/_doc/1
{
  "create_date": "09/25/2015"
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/785.console"></div>
</div>

</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="numeric-detection"></a>Numeric detection<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/mapping/dynamic/field-mapping.asciidoc">edit</a>
</h3>
</div></div></div>
<p>While JSON has support for native floating point and integer datatypes, some
applications or languages may sometimes render numbers as strings. Usually the
correct solution is to map these fields explicitly, but numeric detection
(which is disabled by default) can be enabled to do this automatically:</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">PUT my_index
{
  "mappings": {
    "numeric_detection": true
  }
}

PUT my_index/_doc/1
{
  "my_float":   "1.0", <a id="CO363-1"></a><i class="conum" data-value="1"></i>
  "my_integer": "1" <a id="CO363-2"></a><i class="conum" data-value="2"></i>
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/786.console"></div>
<div class="calloutlist">
<table border="0" summary="Callout list">
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO363-1"><i class="conum" data-value="1"></i></a></p>
</td>
<td align="left" valign="top">
<p>The <code class="literal">my_float</code> field is added as a <a class="xref" href="number.html" title="Numeric datatypes"><code class="literal">float</code></a> field.</p>
</td>
</tr>
<tr>
<td align="left" valign="top" width="5%">
<p><a href="#CO363-2"><i class="conum" data-value="2"></i></a></p>
</td>
<td align="left" valign="top">
<p>The <code class="literal">my_integer</code> field is added as a <a class="xref" href="number.html" title="Numeric datatypes"><code class="literal">long</code></a> field.</p>
</td>
</tr>
</table>
</div>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="dynamic-mapping.html">« Dynamic Mapping</a>
</span>
<span class="next">
<a href="dynamic-templates.html">Dynamic templates »</a>
</span>
</div>
</div>

                  <!-- end body -->
                </div>
                <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                  <div id="rtpcontainer" style="display: block;">
                    <div class="mktg-promo">
                      <h3>Most Popular</h3>
                      <ul class="icons">
                        <li class="icon-elasticsearch-white"><a href="https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&amp;elektra=docs&amp;storm=top-video">Get Started with Elasticsearch: Video</a></li>
                        <li class="icon-kibana-white"><a href="https://www.elastic.co/webinars/getting-started-kibana?baymax=default&amp;elektra=docs&amp;storm=top-video">Intro to Kibana: Video</a></li>
                        <li class="icon-logstash-white"><a href="https://www.elastic.co/webinars/introduction-elk-stack?baymax=default&amp;elektra=docs&amp;storm=top-video">ELK for Logs &amp; Metrics: Video</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </section>

        </div>


<div id="elastic-footer"></div>
<script src="https://www.elastic.co/elastic-footer.js"></script>
<!-- Footer Section end-->

      </section>
    </div>

<script src="/guide/static/jquery.js"></script>
<script type="text/javascript" src="/guide/static/docs.js"></script>
<script type="text/javascript">
  window.initial_state = {}</script>
  </body>
</html>
